package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.OmcRevise;
import com.csun.cmny.provider.model.dto.revise.*;
import com.csun.cmny.provider.model.vo.old_out.OldOutVo;
import com.csun.cmny.provider.model.vo.revise.ReviseOldmanVo;
import com.csun.cmny.provider.model.vo.revise.ReviseVo;
import com.csun.cmny.provider.vo.MyCommentVo;
import com.csun.cmny.provider.model.vo.revise.OldmanFeeVo;

import java.util.List;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2019-09-09 16:44
 * @Description: the interface omc revise service
 */
public interface OmcReviseService extends IService<OmcRevise> {

    /**
     * query revise oldman list
     *
     * @param reviseOldmanQueryDto    the revise oldman query dto
     *
     * @return  the revise oldman vo
     */
    List<ReviseOldmanVo> queryOldmanList(ReviseOldmanQueryDto reviseOldmanQueryDto);

    /**
     * query revise oldman fee by oldman id
     *
     * @param oldmanId      the oldman id
     * @param loginAuthDto  the login auth dto
     *
     * @return  the oldman fee vo
     */
    OldmanFeeVo queryByOldmanId(Integer oldmanId, LoginAuthDto loginAuthDto, String reviseDate);

    /**
     * query revise vo list with page
     *
     * @param reviseQueryDto    the revise query dto
     *
     * @return  the revise vo list
     */
    List<ReviseVo> queryListWithPage(ReviseQueryDto reviseQueryDto);

    /**
     * query revise vo by revise id
     *
     * @param id    the revise id
     *
     * @return  the revise vo
     */
    ReviseVo queryById(Long id);

    /**
     * query revise comment by revise id
     *
     * @param id    the revise id
     *
     * @return  the revise comment list
     */
    List<MyCommentVo> queryCommentById(Long id);

    /**
     * apply revise
     *
     * @param reviseDto     the revise dto
     * @param loginAuthDto  the login auth dto
     *
     * @return  the int.
     */
    Integer apply(ReviseDto reviseDto, LoginAuthDto loginAuthDto);

    /**
     * service approval revise
     *
     * @param reviseApprovalDto the revise approval dto
     * @param loginAuthDto      the login auth dto
     *
     * @return  the int.
     */
    Integer serviceApproval(ReviseApprovalDto reviseApprovalDto, LoginAuthDto loginAuthDto);

    /**
     * admit confirm revise
     *
     * @param reviseConfirmDto  the revise confirm dto
     * @param loginAuthDto      the login auth dto
     *
     * @return  the int.
     */
    Integer admitConfirm(ReviseConfirmDto reviseConfirmDto, LoginAuthDto loginAuthDto);

    /**
     * charge confirm revise
     *
     * @param reviseConfirmDto  the revise confirm dto
     * @param loginAuthDto      the login auth dto
     *
     * @return  the int.
     */
    Integer chargeConfirm(ReviseConfirmDto reviseConfirmDto, LoginAuthDto loginAuthDto);

    /**
     * query cur task states
     *
     * @param loginAuthDto
     *
     * @return
     */
    List<Integer> queryCurTaskStates(LoginAuthDto loginAuthDto);

    /**
     * 根据账单Id查询调房调级信息
     *
     * @param billId 账单Id
     *
     * @return  the revise vo
     */
    ReviseVo queryByBillId(Long billId);
}
